package sim_moteur.factory;

import java.util.HashMap;
import java.util.Map;

import sim_moteur.element.Chose;

public class ChoseFactory extends AbstractFactory implements
		ChoseFactoryI<Chose> {
	public final static String CHOSE_NAME = "Chose_";

	private int compteur = 0;

	//private static ThreadLocal<ChoseFactory> instance = new ThreadLocal<>();

	public ChoseFactory(String simPrefix) {
		super(simPrefix);
		nombre = nombreChoseMax;
	}

	/**
	 * Retourne la seule instance de fabrique de choses simples. (singleton)
	 * Noter que chaque thread possède sa propre copie du singleton
	 * 
	 * @return la fabrique
	 */
//	public static ChoseFactory getInstance(String prefix) {
//		if (instance.get() == null) {
//			instance.set(new ChoseFactory(prefix));
//		}
//		return instance.get();
//	}

	@Override
	public Chose get() {

		String nom = CHOSE_NAME + compteur++  ;
		Chose chose = new Chose(nom, getPrefix());
		place(chose);
		nombre--;
		return chose;
	}

	/**
	 * Réinitialise la fabrique
	 */
//	public static void reset() {
//		String prefix = instance.get().getPrefix();
//
//		instance.set(new ChoseFactory(prefix));
//	}

	@Override
	public Map<String, Chose> getAll() {
		Map<String, Chose> retMap = new HashMap<>();
		while (nombre > 0) {
			Chose nouvelleChose = get();
			retMap.put(nouvelleChose.getName(), nouvelleChose);
		}
		return retMap;
	}

}
